#include <regx52.h>

// 南北方向灯引脚定义
sbit N_R = P2^0;  // 南北红灯
sbit N_G = P2^1;  // 南北绿灯
sbit N_Y = P2^2;  // 南北黄灯
// 东西方向灯引脚定义
sbit E_R = P2^3;  // 东西红灯
sbit E_G = P2^4;  // 东西绿灯
sbit E_Y = P2^5;  // 东西黄灯

// 延时函数，大致实现毫秒级延时
void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

void main(void)
{
    unsigned char i;
    // 初始化所有灯为关闭状态（高电平）
    P2 = 0xFF;
    
    while (1)
    {
        // 阶段1：南北方向绿灯，东西方向红灯，持续5秒
        N_R = 1;  // 南北红灯灭
        N_G = 0;  // 南北绿灯亮
        N_Y = 1;  // 南北黄灯灭
        E_R = 0;  // 东西红灯亮
        E_G = 1;  // 东西绿灯灭
        E_Y = 1;  // 东西黄灯灭
        delay_ms(5000);
        
        // 阶段2：南北方向其他灯灭，黄灯闪烁3次（500ms），东西方向红灯保持
        N_G = 1;  // 南北绿灯灭
        for (i = 0; i < 3; i++)
        {
            N_Y = 0;  // 南北黄灯亮
            delay_ms(500);
            N_Y = 1;  // 南北黄灯灭
            delay_ms(500);
        }
        
        // 阶段3：东西方向绿灯，南北方向红灯，持续5秒
        E_R = 1;  // 东西红灯灭
        E_G = 0;  // 东西绿灯亮
        E_Y = 1;  // 东西黄灯灭
        N_R = 0;  // 南北红灯亮
        N_G = 1;  // 南北绿灯灭
        N_Y = 1;  // 南北黄灯灭
        delay_ms(5000);
        
        // 阶段4：东西方向其他灯灭，黄灯闪烁3次（500ms），南北方向红灯保持
        E_G = 1;  // 东西绿灯灭
        for (i = 0; i < 3; i++)
        {
            E_Y = 0;  // 东西黄灯亮
            delay_ms(500);
            E_Y = 1;  // 东西黄灯灭
            delay_ms(500);
        }
    }
}
    